import sys, datetime
 
class QifItem:
 def __init__(self):
  self.date = None
  self.amount = None
  self.cleared = None
  self.num = None
  self.payee = None
  self.memo = None
  self.address = None
  self.category = None
  self.categoryInSplit = None
  self.memoInSplit = None
  self.amountOfSplit = None
  self.checkNumber = None

 def getCamBankCSV(self):
  return "%s;%s;%s;%s;%s" % (self.date, self.payee, self.memo or self.payee, self.amount, 'EUR')

def parseQif(infile):
 """
 Parse a qif file and return a list of entries.
 infile should be open file-like object (supporting readline() ).
 """

 inItem = False
 englishDateFormat = False

 items = []
 curItem = QifItem()
 #camfix: 1 premier readline pour sauter l'entete
 line = infile.readline()
 line = infile.readline()
 while line != '':
  if line[0] == '\n': # blank line
   pass
  elif line[0] == '^': # end of item
   # save the item
   items.append(curItem)
   curItem = QifItem()
  elif line[0] == 'D':
   curItem.date = line[1:].strip()
   # try to detect english Date Format if month > 12 or if date is in the future
   (d, m, y) = curItem.date.split('/')
   if int(m) > 12 or datetime.date(int(y), int(m), int(d)) > datetime.date.today():
    englishDateFormat = True
   # correct YY to YYYY
   if int(y) < 2000:
    curItem.date = d+'/'+m+'/20'+y
  elif line[0] == 'T':
   curItem.amount = line[1:].strip()
  elif line[0] == 'C':
   curItem.cleared = line[1:].strip()
  elif line[0] == 'P':
   curItem.payee = line[1:].strip()
  elif line[0] == 'N':
   curItem.checkNumber = line[1:].strip()
  elif line[0] == 'M':
   curItem.memo = line[1:].strip()
  elif line[0] == 'A':
   curItem.address = line[1:].strip()
  elif line[0] == 'L':
   curItem.category = line[1:].strip()
  elif line[0] == 'S':
   try:
    curItem.categoryInSplit.append(";" + line[1:].strip())
   except AttributeError:
    curItem.categoryInSplit = line[1:].strip()
  elif line[0] == 'E':
   try:
    curItem.memoInSplit.append(";" + line[1:].strip())
   except AttributeError:
    curItem.memoInSplit = line[1:].strip()
  elif line[0] == '$':
   try:
    curItem.amountInSplit.append(";" + line[1:].strip())
   except AttributeError:
    curItem.amountInSplit = line[1:].strip()
  else:
   # don't recognise this line; ignore it
   print("Skipping unknown line:\n"+line, file=sys.stderr)

  line = infile.readline()
 # reverting to european dates if needed
 if englishDateFormat:
  ii = []
  for item in items:
   (m, d, y) = item.date.split('/')
   item.date = d+'/'+m+'/'+y
   ii.append(item)
  return ii
 return items

if __name__ == "__main__":
 # read from stdin and write CSV to stdout
 items = parseQif(sys.stdin)
 #print repr(items[0])
 for item in items:
  print(item.getCamBankCSV())
